Google 開發三個容器系統學習到的重要概念就是,Control Plane 是分散式系統的核心,所以 Kubernetes 最重要的組件就是 Control Plane 組件,我們這一章節將初步介紹 Control Plane 組件,並在之後一一詳細介紹。
API Server:
Kubernetes 將 Pod 作為統一的排程單位,但是排程資源一定有個狀態機,狀態機就一定要有存儲,Borg 把存儲統一由 BorgMaster 管理而 Omega 將狀態交給各個排程組件管理,前者缺乏靈活,後者充滿衝突。所以 Kubernetes 採取折衷方案,他採取的依然是集中式存儲,但是把 API Server 作為統一入口,不管你要存取狀態還是修改狀態,都只能通過 API Server,這樣保持了一致性,除此之外,所有的組件自己管理自己的狀態機,所以不會出現多個組件提交同一筆狀態的衝突狀態。
由於是統一入口,所以 API Sever 提供 Admission controller 可以注入,很多網路以及安全相關的設定都需要仰賴這個功能。
CRD 註冊到 API Server。
etcd:
就是基於 Raft 算法的分散式 Key/Value 存儲。
kube-scheduler:
Borg 以及 Omega 都有 Scheduler 的組件,但是這兩者的 Scheduler 跟 kube-scheduler 有一個極大的差異,就是 Borg 以及 Omega 的 Scheduler 需要處理邏輯還有狀態機,但是 kube-scheduler 專注於排程 Pod,所有需要排程 Pod 的動作都只能由 kube-scheduler 完成,所以所有跟排程 Pod 有關的設定都是跟 kube-scheduler 有關。
controller-manager:
如果沒有 controller,kubernetes 什麼都不是。
controller 藉由 reconcile 維護自己的邏輯還有狀態機,在需要排程 Pod 的時候會傳送請求到 kube-scheduler,但是 controller 不只要求排程 Pod,比如 node controller 控制的就是 Node,deployment controller 控制的就是 Replicas,cronjob 控制的就是 job。
CRD 的 controller 會放在這邊運行
前幾篇文章都非常糟糕,今天突然開竅,也許是因為終於碰到熟悉的 Kubernetes Control Plane,也許是因為開始熟悉寫作框架,希望接下來可以繼續順利下去。